/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package clases;

import controladores.ConvenioXPeriodoXEstudianteFacadeLocal;
import entidades.CalificacionDesempeno;
import entidades.ConvenioXPeriodoXEstudiante;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import negocio.CalificacionDesempenoInterface;

/**
 *
 * @author BATAQUERO
 */
@ManagedBean
@ViewScoped
public class ListaCalificacionDesempenoBean implements Serializable{
    
    @EJB
    private ConvenioXPeriodoXEstudianteFacadeLocal convenioXPeriodoXEstudianteFacadeLocal;
    private List<ConvenioXPeriodoXEstudiante> convenioXPeriodoXEstudiantes;
    private String ESTADO_PERIODO = "ACT";
    private List<CalificacionDesempeno> calificacionesDesempeno;
    private ConvenioXPeriodoXEstudiante estudianteSelected;
    
    @ManagedProperty(value = "#{sessionBean}")
    private SessionBean sessionBean;
    private int idSupervisor;
    private int idCoordinador;
    private int idPracticante;
    private int idSupervisorEntidad;
    private final int ROL_COORDINADOR = 2;
    private final int ROL_SUPERVISOR = 3;
    private final int ROL_SUPERVISOR_ENTIDAD = 4;
    private final int ROL_PRACTICANTE = 5;
    private CalificacionDesempeno selectedCalificacionDesempeno;
    @EJB
    private CalificacionDesempenoInterface calificacionDesempenoInterface;
    private boolean disabledListaPracticante;
    private boolean disabledListaSupervisorEntidad;
    private boolean disableListaSupervisor;
    private boolean visibleEdicionFormato;
    
    

    public ListaCalificacionDesempenoBean(){
    }
    
    @PostConstruct
    public void init(){
        switch (sessionBean.getUsuarioSession().getIdRol().getIdRol()){
            case ROL_COORDINADOR:
                idCoordinador = sessionBean.getUsuarioSession().getIdUsuario();
                convenioXPeriodoXEstudiantes = convenioXPeriodoXEstudianteFacadeLocal.listarEstudiantesXPeriodo(ESTADO_PERIODO);
                disabledListaPracticante = true;
                disabledListaSupervisorEntidad = true;
                disableListaSupervisor = true;
                visibleEdicionFormato = false;
                break;
            case ROL_SUPERVISOR:
                idSupervisor = sessionBean.getUsuarioSession().getIdUsuario();
                //supervisor.setIdSupervisor(3010);
                //convenioXPeriodoXEstudiantes = convenioXPeriodoXEstudianteFacadeLocal.listarConvenisoPorPeriodo(2, 2013);
                convenioXPeriodoXEstudiantes = convenioXPeriodoXEstudianteFacadeLocal.listarEstudiantesXSupervisor(idSupervisor, ESTADO_PERIODO);
                disabledListaPracticante = true;
                disabledListaSupervisorEntidad = true;
                disableListaSupervisor = false;
                visibleEdicionFormato = true;
                break;
            case ROL_SUPERVISOR_ENTIDAD:
                idSupervisorEntidad = sessionBean.getUsuarioSession().getIdUsuario();
                convenioXPeriodoXEstudiantes = convenioXPeriodoXEstudianteFacadeLocal.consultarEstudianteXSupervisorEntidad(idSupervisorEntidad, ESTADO_PERIODO);
                disabledListaPracticante = true;
                disabledListaSupervisorEntidad = false;
                disableListaSupervisor = true;
                visibleEdicionFormato = false;
                break;
            case ROL_PRACTICANTE:
                idPracticante = sessionBean.getUsuarioSession().getIdUsuario();
                convenioXPeriodoXEstudiantes = convenioXPeriodoXEstudianteFacadeLocal.consultarEstudiante(idPracticante, ESTADO_PERIODO);
                disabledListaPracticante = false;
                disabledListaSupervisorEntidad = true;
                disableListaSupervisor = true;
                visibleEdicionFormato = false;
                break;
                
        }
    
    }
    
    public void listarCalificacionesDesempeno(ActionEvent actionEvent){
        calificacionesDesempeno = convenioXPeriodoXEstudianteFacadeLocal.consultarConvenioXPeriodoXEstudiante(estudianteSelected.getEstudiante().getIdEstudiante(), ESTADO_PERIODO).getCalificacionDesempenoList();
    }
    
   public void permitirEdicionCalificacionDesempeno(CalificacionDesempeno calificacionDesempeno) {
        editarFormatoCalificacionDesempeno(calificacionDesempeno);
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Exitoso", "Se ha permitido la edicion de este formato."));
    }

    public void aprobarFormato(CalificacionDesempeno calificacionDesempeno) {
        editarFormatoCalificacionDesempeno(calificacionDesempeno);
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Exitoso", "Se ha modificado la aprobaciòn del formato."));
    }
    
    private void editarFormatoCalificacionDesempeno(CalificacionDesempeno calificacionDesempeno){
        try {
            calificacionDesempenoInterface.editarCalificacionDesempeno(calificacionDesempeno);
        } catch (Exception e) {
            FacesMessage facesMessage = new FacesMessage("Error");
            FacesContext.getCurrentInstance().addMessage(null, facesMessage);
            e.printStackTrace();
        }
    }
    
    public List<ConvenioXPeriodoXEstudiante> getConvenioXPeriodoXEstudiantes() {
        return convenioXPeriodoXEstudiantes;
    }

    public void setConvenioXPeriodoXEstudiantes(List<ConvenioXPeriodoXEstudiante> convenioXPeriodoXEstudiantes) {
        this.convenioXPeriodoXEstudiantes = convenioXPeriodoXEstudiantes;
    }

    public SessionBean getSessionBean() {
        return sessionBean;
    }

    public void setSessionBean(SessionBean sessionBean) {
        this.sessionBean = sessionBean;
    }

    public List<CalificacionDesempeno> getCalificacionesDesempeno() {
        return calificacionesDesempeno;
    }

    public void setCalificacionesDesempeno(List<CalificacionDesempeno> calificacionesDesempeno) {
        this.calificacionesDesempeno = calificacionesDesempeno;
    }

    public ConvenioXPeriodoXEstudiante getEstudianteSelected() {
        return estudianteSelected;
    }

    public void setEstudianteSelected(ConvenioXPeriodoXEstudiante estudianteSelected) {
        this.estudianteSelected = estudianteSelected;
    }

    public CalificacionDesempeno getSelectedCalificacionDesempeno() {
        return selectedCalificacionDesempeno;
    }

    public void setSelectedCalificacionDesempeno(CalificacionDesempeno selectedCalificacionDesempeno) {
        this.selectedCalificacionDesempeno = selectedCalificacionDesempeno;
    }

    public CalificacionDesempenoInterface getCalificacionDesempenoInterface() {
        return calificacionDesempenoInterface;
    }

    public void setCalificacionDesempenoInterface(CalificacionDesempenoInterface calificacionDesempenoInterface) {
        this.calificacionDesempenoInterface = calificacionDesempenoInterface;
    }

    public boolean isDisabledListaPracticante() {
        return disabledListaPracticante;
    }

    public void setDisabledListaPracticante(boolean disabledListaPracticante) {
        this.disabledListaPracticante = disabledListaPracticante;
    }

    public boolean isDisabledListaSupervisorEntidad() {
        return disabledListaSupervisorEntidad;
    }

    public void setDisabledListaSupervisorEntidad(boolean disabledListaSupervisorEntidad) {
        this.disabledListaSupervisorEntidad = disabledListaSupervisorEntidad;
    }

    public boolean isDisableListaSupervisor() {
        return disableListaSupervisor;
    }

    public void setDisableListaSupervisor(boolean disableListaSupervisor) {
        this.disableListaSupervisor = disableListaSupervisor;
    }

    public boolean isVisibleEdicionFormato() {
        return visibleEdicionFormato;
    }

    public void setVisibleEdicionFormato(boolean visibleEdicionFormato) {
        this.visibleEdicionFormato = visibleEdicionFormato;
    }
    
   public void irFormularioCalificacionDesempeno(CalificacionDesempeno selectedCalificacionDesempeno) {
        try {
            ExternalContext ctx = FacesContext.getCurrentInstance().getExternalContext();
            ctx.redirect("CalificacionDesempeno.xhtml?calificacionDesempeno=" + selectedCalificacionDesempeno.getIdCalificacionDesempeno() + "&&accionCalificacionDesempeno=Consultar");
            
        } catch (IOException ex) {
            Logger.getLogger(ListaCalificacionDesempenoBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    } 

}
